package com.atguigu.day14.exception.e3;

import org.junit.Test;
/*
异常: 程序执行时发生的错误情况 导致程序无法继续执行
异常的体系:
    Throwable
       -- Error: 错误 我们不能处理 只能提前避免
       -- Exception: 异常 可以处理的
            -- 运行时异常: 程序执行起来才报错
            -- 编译时/检查/受检异常: 写完代码就报错
    a.getMessage():发生异常的原因
    a.printStackTrace();打印异常的详细信息 异常的类型 原因 发生的位置
异常的抛出机制:
    自动抛出: 发生异常会产生一个异常对象 是否对异常进行了处理 如果本方法没有处理 那么就会沿着调用关系逐级向上抛出
            直到抛给jvm  终止程序 打印异常的类型  发生异常的原因  异常的抛出轨迹
    手动抛出: 如果数据不满足要求 可以手动抛出
            throw 一个异常对象;
异常的处理:
    处理: try{可能发生异常的代码}catch(异常类型 e){}
    注意:
       1.只能捕获声明的异常
       2.可以一次捕获多个异常 多重catch  异常范围从小到大
         可以在一个catc内写多个异常类型           try{}catch (ArrayIndexOutOfBoundsException |ArithmeticException | NullPointerException  e){}
       3.try{}中声明的变量只能在try语句块内使用 别的位置想要用需要进行作用域提升



    不处理:

 */
public class TryTest {

    @Test
    public void test05(){
        System.out.println("窗前明月光");
        int[]arr = {33,66,99};
        int m=0;
        try {
            m = 10;
            System.out.println("arr[10] = " + arr[10]);

        }catch (ArrayIndexOutOfBoundsException a){
            a.printStackTrace();
            System.out.println(m);
        }
        System.out.println("举头望明月 "+m);
        System.out.println("GameOver");
    }

    @Test
    public void test04(){
        System.out.println("窗前明月光");
        int[]arr = {33,66,99};
        try {
            int[][]arr2 = new int[3][];
            System.out.println("arr2[0].length = " + arr2[0].length);
            int m = 10/0;
            System.out.println("arr[10] = " + arr[10]);
            System.out.println("举头望明月");
        }catch (ArrayIndexOutOfBoundsException |ArithmeticException | NullPointerException  e){
            e.printStackTrace();
        }
        System.out.println("GameOver");
    }

    @Test
    public void test03(){
        System.out.println("窗前明月光");
        int[]arr = {33,66,99};
        try {
            int[][]arr2 = new int[3][];
            System.out.println("arr2[0].length = " + arr2[0].length);
            int m = 10/0;
            System.out.println("arr[10] = " + arr[10]);
            System.out.println("举头望明月");
        }catch (ArrayIndexOutOfBoundsException e){
            e.printStackTrace();
        }catch (ArithmeticException a){
            a.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("GameOver");
    }

    @Test
    public void test02(){
        System.out.println("窗前明月光");
        int[]arr = {33,66,99};
        try {
            System.out.println("arr[10] = " + arr[10]);
            System.out.println("举头望明月");
        }catch (ArrayIndexOutOfBoundsException a){
           // System.out.println("发生了异常");
            //todo 打印异常的详细信息 异常的类型 原因 发生的位置
            a.printStackTrace();
            //todo 发生异常的原因
            String message = a.getMessage();
            System.out.println("message = " + message);//Index 10 out of bounds for length 3
        }
        System.out.println("GameOver");
    }

    @Test
    public void test01(){

        System.out.println("窗前明月光");
        int[]arr = {33,66,99};
        System.out.println("arr[10] = " + arr[10]);
        System.out.println("举头望明月");
        System.out.println("GameOver");
    }
}
